package com.z.system.config;

import org.springdoc.core.properties.SwaggerUiConfigParameters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Components;

/**
 * Swagger配置类
 * 使用SpringDoc OpenAPI配置REST API文档
 */
@Configuration
@OpenAPIDefinition(
    info = @Info(
        title = "Art Design Admin API",
        version = "1.0.0",
        description = "Art Design管理系统API文档",
        contact = @Contact(
            name = "Admin",
            email = "admin@example.com"
        ),
        license = @License(
            name = "Apache 2.0",
            url = "http://www.apache.org/licenses/LICENSE-2.0.html"
        )
    ),
    externalDocs = @ExternalDocumentation(
        description = "项目文档",
        url = "http://localhost:8080/docs"
    )
)
public class SwaggerConfig {
    
    /**
     * 配置OpenAPI，过滤掉非业务的schemas
     * @return OpenAPI对象
     */
    @Bean
    public OpenAPI customOpenAPI() {
        // 创建组件并配置schema过滤器
        Components components = new Components();
        // 可以通过此处配置具体的schema过滤规则
        // 这里仅创建组件对象，实际过滤逻辑可根据需要添加
        
        return new OpenAPI()
            .components(components);
    }
    
    /**
     * 配置Swagger UI参数，完全隐藏实体信息
     * 注意：该方法不需要@Bean注解，Spring会自动发现并应用配置
     * @param swaggerUiConfigParameters Swagger UI配置参数
     * @return 配置好的Swagger Ui配置参数对象
     */
    public SwaggerUiConfigParameters configureSwaggerUi(SwaggerUiConfigParameters swaggerUiConfigParameters) {
        swaggerUiConfigParameters.setDefaultModelsExpandDepth(-1); // 不自动展开models
        swaggerUiConfigParameters.setDocExpansion("none"); // 默认合上API文档分组
        swaggerUiConfigParameters.setShowExtensions(false); // 不显示扩展
        swaggerUiConfigParameters.setShowCommonExtensions(false); // 不显示通用扩展
        swaggerUiConfigParameters.setTryItOutEnabled(true); // 启用Try it out功能
        return swaggerUiConfigParameters;
    }
}